﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace NoteEnumerable
{
	class Program
	{
		static void Main(string[] args)
		{
			// Создадим объект Дневник
			DayBook Diary = new DayBook("Словарь 1");
			Console.WriteLine("Идёт создание дневника...");
			// Добавим запись в дневник
			Diary.AddNote("111");
			// Задержка в 1 сек
			System.Threading.Thread.Sleep(1000);
			// Добавим запись в дневник
			Diary.AddNote("222");
			// Задержка в 1 сек
			System.Threading.Thread.Sleep(1000);
			// Добавим запись в дневник
			Diary.AddNote("333");
			// Задержка в 1 сек
			System.Threading.Thread.Sleep(1000);
			// Добавим запись в дневник
			Diary.AddNote("444");
			// Задержка в 1 сек
			System.Threading.Thread.Sleep(1000);
			// Добавим запись в дневник
			Diary.AddNote("555");


			Console.WriteLine("Исходный массив:");
			foreach (Note n in Diary)
			{
				Console.WriteLine(n.Text + " Дата: " + n.Date);
			}

			Console.WriteLine("Массив отсортированный по убыванию даты:");
			// Сортировка массива с помощью IComparer<Note>
			// p.s. Метод Sort у List реализует механизм быстрой сортировки
			Diary.Notes.Sort(new DayBook.SortDateDesc());
			foreach (Note n in Diary)
			{
				Console.WriteLine(n.Text + " Дата: " + n.Date);
			}

			Console.WriteLine("Массив отсортированный по возрастанию даты:");
			// Сортировка массива с помощью IComparer<Note>
			Diary.Notes.Sort(new DayBook.SortDateAsc());

			foreach (Note n in Diary)
			{
				Console.WriteLine(n.Text + " Дата: "+n.Date);
			}

			Console.WriteLine("Удаление из дневника записи с надписью 111");
			Diary.RemoveNote("111");
			foreach (Note n in Diary)
			{
				Console.WriteLine(n.Text + " Дата: " + n.Date);
			}

			Console.WriteLine("Создаём 5 дополнительных словарей словарей");
			DayBook Diary2 = new DayBook("Словарь 2");
			// Добавляем лямбду на Action добавления к Словарю-2
			Diary2.Added += x => Console.WriteLine("Запись "+x+" добавлена в "+Diary2.Name);
			// Добавляем лямбду на Action удаления к Словарю-2
			Diary2.Deleted += x => Console.WriteLine("Запись " + x + " удалена из " + Diary2.Name);
			// проверяем как Action добавляем и выводит сообщение
			Diary2.Added("6-d2"); 
			Diary2.Added("66-d2"); // Все добавленные к словарю-2 запсии вызовут вывод сообщения на консоль
			// проверяем как Action удаляет запись и выводит сообщение
			Diary2.Deleted("66-d2");
			DayBook Diary3 = new DayBook("Словарь 3");
			Diary3.AddNote("7-d3");
			DayBook Diary4 = new DayBook("Словарь 4");
			Diary4.AddNote("8-d4");
			DayBook Diary5 = new DayBook("Словарь 5");
			Diary5.AddNote("9-d5");
			DayBook Diary6 = new DayBook("Словарь 6");
			Diary6.AddNote("10-d6");

			Console.WriteLine("Создаём рюкзак из 5 словарей");
			Rucksack BackPack = new Rucksack();
			BackPack.AddDiary(Diary2);
			BackPack.AddDiary(Diary3);
			BackPack.AddDiary(Diary4);
			BackPack.AddDiary(Diary5);
			BackPack.AddDiary(Diary6);

			Console.WriteLine("Выводим все записи из Random-словаря в рюкзаке");
			// Random от 0 до (количества словарей-1)
			foreach (DayBook n in BackPack)	// выбираем Random-ом словарь в рюкзаке
			{
				foreach (Note z in n.Notes) // выводим все записи из выбранного словаря
				{
					Console.WriteLine(n.Name+" Текст: "+z.Text+" Дата: "+ z.Date);
				}
			}
			
		}
	}
}
